package com.cskaoyan.javase.thread._5pc._0introduction;

/**
 * 实现生产者消费者模型（简单版）
 *
 * 这时它们需要共享一个商品数量的数据
 * 需要进行线程同步,来保证不会出现错误数据
 *
 * 然后还需要让消费者做一个if判断,必须出现消费不存在的商品(消费负数)
 * 能不能实现生产者生产一个,消费者就立刻消费一个?
 * 可以实现,通过线程同步加上if判断,是可以实现的
 * 但是我们的实现并不是通过线程通信,而是使用了一种取巧的方式
 * 真正实现这个任务需要线程间进行通信:
 *      1.生成者生产出来一个商品,立刻告诉消费让消费者消费
 *      2.消费者者消费了一个商品,立刻告诉生产者让生产者生成
 *
 * @since 17:39
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    // 商品的数量
    private static int goodsNum = 0;
    private static final Object OBJECT = new Object();

    public static void main(String[] args) {
        new Thread(() -> {
            while (true) {
                synchronized (OBJECT) {
                    if (goodsNum == 0) {
                        goodsNum++;
                        System.out.println("生产者生产了一个商品,此时商品的数量是" + goodsNum);
                    }
                }
            }

        }, "生产者").start();

        new Thread(() -> {
            while (true) {
                synchronized (OBJECT) {
                    if (goodsNum == 1) {
                        goodsNum--;
                        System.out.println("消费者消费了一个商品,此时商品的数量是" + goodsNum);
                    }
                }
            }
        }, "消费者").start();
    }
}
